ker
ker(qm)
Func
Local mm,aa,ql,qv,kk,qf
rref(qm)àmm (on utilise la réduction de Gauss-Jordan)
If mm=identity(colDim(mm)):return {0} (si la réduite de Gauss-Jordan est l'identité alors le noyau est réduit à 0 (et non-pas à l'ensemble vide!) )
newMat(rowDim(qm),1)àqf
for aa,2,colDim(mm)
newMat(colDim(mm),1)àql
1àql[aa,1]
mm*-qlàqv
1àqv[aa,1]
If isnul(mm*qv)=true then
pgcd(mat4list(qv))àkk
If left(string(kk),3)="gcd":1àkk
seq(qv[i,l]/kk,i,1,rowdim(qv))àqv
(list4mat(qv))Tàqv
augment(qf,qv)àqf
EndIf
EndFor
subMat(qf,1,2,rowDim(qf),colDim(qf))
EndFunc